"SEPTEMBER LISTING 2"  AS SAVED ON DISK
0800              1           TTL "Listing two: String Examples"
0800              2  ;
0800              3  ;
0800              4  ;
0800              5  ***********************************
0800              6  *                                 *
0800              7  *  LISTING 2: An example of       *
0800              8  *    the various SPEED/ASM string *
0800              9  *    handling routines.           *
0800             10  *                                 *
0800             11  ***********************************
0800             12  ;
0800             13  ;
0800             14  ;
0800             15  ;
0800             16  ;
0800             17  ;
0800             18  ;
0800             19  ;
0800             20  ;  GENERAL PURPOSE EQUATES
0800             21  ;
0800             22  ; The following variable are used
0800             23  ; by the SPEED/ASM package and
0800             24  ; shouldn't be used by the SPEED/ASM
0800             25  ; programmer.
0800             26  ;
0800             27  ;
0800             28  ;
0800             29  ;
0000             30  FORASAV  EPZ 0
0001             31  FORXSAV  EPZ FORASAV+1
0002             32  FORYSAV  EPZ FORXSAV+1
0003             33  FORZPG   EPZ FORYSAV+1
0005             34  DESTADR  EPZ FORZPG+2
0007             35  PTRADR   EPZ DESTADR+2
0009             36  ISIMMED  EPZ PTRADR+2
000A             37  OP       EPZ ISIMMED+1
000C             38  MAXLEN   EPZ OP+2
000D             39  VALUE    EPZ MAXLEN+1
000F             40  DIGIT    EPZ VALUE+2
0010             41  LEAD0    EPZ DIGIT+1
0011             42  JMPADR   EPZ LEAD0+1
0013             43  COUNT    EPZ JMPADR+2
0014             44  GOTLN    EPZ COUNT+1
0800             45  ;
0800             46  ;
0800             47  ;
0800             48  ;
0800             49  ;
0800             50  ;
0800             51  ****************
0800             52  *   CONSTANTS  *
0800             53  ****************
0800             54  ;
0800             55  ;
0800             56  ;
0800             57  ; The following symbols are constants
0800             58  ; for the values "FALSE", "TRUE", and
0800             59  ; Carriage Return (respectively).
0800             60  ;
0800             61  ; These symbol should only appear
0800             62  ; as immediate operands to a 6502
0800             63  ; instruction or in the operand field
0800             64  ; of a pseudo-opcode like BYT.
0800             65  ;
0800             66  ;
0800             67  ;
0800             68  ;
0800             69  ;
0000             70  FALSE    EQU 0
0001             71  TRUE     EQU 1
008D             72  CR       EQU $8D
0800             73  ;
0800             74  ;
0800             75  ;
0800             76  ;
0800             77  ;
0800             78  ;
0800             79  ; "IF" STATEMENT EQUATES
0800             80  ;
0800             81  ; The following symbols should only
0800             82  ; be used in the ADR pseudo-opcode
0800             83  ; following a call to SPEED/ASM
0800             84  ; IFx rountines.
0800             85  ;
0800             86  ;
0800             87  ;
00BD             88  EQ       EQU "="
00A3             89  NE       EQU "#"
00BE             90  GT       EQU ">"
00BC             91  LT       EQU "<"
BDBE             92  GE       EQU ">"|"="*256
BDBC             93  LE       EQU "<"|"="*256
0800             94  ;
0800             95  ;
0800             96  ;
0800             97  ;
0800             98  ;
0800             99  ;
0800            100  ;
0800            101  ****************************
0800            102  *  SPEED/ASM ENTRY POINTS  *
0800            103  ****************************
0800            104  ;
0800            105  ;
0800            106  ;
0800            107  ;
0800            108  ; NOTE: THE EQUATE OF PUTC MUST
0800            109  ; BE CHANGED IF YOU RELOCATE
0800            110  ; SPEED/ASM TO SOME LOCATION
0800            111  ; OTHER THAN $7800
0800            112  ;
0800            113  ;
0800            114  ;
7800            115  PUTC     EQU $7800
7803            116  GETC     EQU PUTC+3
7806            117  SAGL     EQU GETC+3          ;FOR USE BY S/A ONLY- SEE DOC.
7809            118  SAPC     EQU SAGL+3          ; "   "   "  "   "     "   "
780C            119  HOME     EQU SAPC+3          ;HOME AND CLEAR
780F            120  READLN   EQU HOME+3
7812            121  INIT     EQU READLN+3
7815            122  FOR      EQU INIT+3
7818            123  FOR0     EQU FOR+3
781B            124  NEXT     EQU FOR0+3
781E            125  IFI      EQU NEXT+3
7821            126  IFI0     EQU IFI+3
7824            127  IFS      EQU IFI0+3
7827            128  IFS0     EQU IFS+3
782A            129  MOVE     EQU IFS0+3
782D            130  LOAD     EQU MOVE+3
7830            131  MOVS     EQU LOAD+3
7833            132  LDSTR    EQU MOVS+3
7836            133  PRINT    EQU LDSTR+3
7839            134  PRTSTR   EQU PRINT+3
783C            135  PRTINT   EQU PRTSTR+3
783F            136  RDSTR    EQU PRTINT+3
7842            137  RDINT    EQU RDSTR+3
7845            138  ONXGOTO  EQU RDINT+3
7848            139  CASE     EQU ONXGOTO+3
784B            140  CASEI    EQU CASE+3
784E            141  INSET    EQU CASEI+3
7851            142  NOTINSET EQU INSET+3
7854            143  ABS      EQU NOTINSET+3
7857            144  NEG      EQU ABS+3
785A            145  MUL      EQU NEG+3
785D            146  DIV      EQU MUL+3
7860            147  MOD      EQU DIV+3
7863            148  RND      EQU MOD+3
7866            149  SUBSTR   EQU RND+3
7869            150  INDEX    EQU SUBSTR+3
786C            151  LENGTH   EQU INDEX+3
786F            152  CONCAT   EQU LENGTH+3
0800            153  ;
0800            154  ;
0800            155  ;
0800            156  ;
0800            157  ****************************
0800            158  ;
0800            159  ;
0800            160  ; Begin of program 1.2
0800            161  ;
FF69            162  EXIT     EQU $FF69
0800            163  ;
0800            164  ;
0800 20 12 78   165  START    JSR INIT            ; Always do this first!
0803            166  ;
0803            167  ;
0803 20 0C 78   168           JSR HOME
0806 20 36 78   169           JSR PRINT
0809 8D 8D D3   170           BYT CR,CR,"SPEED/ASM String Routine Examples",CR,CR,0
080C D0 C5 C5 
080F C4 AF C1 
0812 D3 CD A0 
0815 D3 F4 F2 
0818 E9 EE E7 
081B A0 D2 EF 
081E F5 F4 E9 
0821 EE E5 A0 
0824 C5 F8 E1 
0827 ED F0 EC 
082A E5 F3 8D 
082D 8D 00 
082F            171  ;
082F            172  ;
082F            173  **********************************
082F            174  *
082F            175  * The following call to PRESTO
082F            176  * outputs a string that was pre~
082F            177  * initialized by LISA.
082F            178  *
082F            179  **********************************
082F            180  ;
082F            181  ;
082F            182  ;
082F 20 39 78   183           JSR PRTSTR
0832 F2 0B      184           ADR STRVAR1
0834 A9 8D      185           LDA #CR
0836 20 00 78   186           JSR PUTC
0839            187  ;
0839            188  ;
0839            189  **********************************
0839            190  *
0839            191  * The following section of code
0839            192  * reads a new line of text from
0839            193  * the keyboard and stuffs it into
0839            194  * the STOVAR2 variable. If the
0839            195  * string was too long, the V flag
0839            196  * is returned set and the user is
0839            197  * prompted to re-enter the data.
0839            198  *
0839            199  **********************************
0839            200  ;
0839            201  ;
0839 20 0F 78   202  ENTERSTR JSR READLN          ;Force a new line from the kbd
083C 20 3F 78   203           JSR RDSTR
083F 13 0C      204           ADR STRVAR2
0841 50 28      205           BVC GOODSTR         ;If no error.
0843            206  ;
0843 20 36 78   207           JSR PRINT
0846 8D C5 F2   208           BYT CR,"Error: String too long",CR
0849 F2 EF F2 
084C BA A0 D3 
084F F4 F2 E9 
0852 EE E7 A0 
0855 F4 EF EF 
0858 A0 EC EF 
085B EE E7 8D 
085E D2 E5 E5   209           BYT "Reenter: ",0
0861 EE F4 E5 
0864 F2 BA A0 
0867 00 
0868 4C 39 08   210           JMP ENTERSTR
086B            211  ;
086B            212  ;
086B            213  ; Print the string the user just entered.
086B            214  ;
086B 20 39 78   215  GOODSTR  JSR PRTSTR
086E 13 0C      216           ADR STRVAR2
0870            217  ;
0870            218  ;
0870            219  **********************************
0870            220  *
0870            221  * The following section of code
0870            222  * loads STRVAR3 with a string
0870            223  * constant ("This is a string")
0870            224  * and then copies the STRVAR3
0870            225  * variable into STOVAR4. After
0870            226  * all the loading and copying is
0870            227  * performed/ the contents of the
0870            228  * strings are displayed.
0870            229  *
0870            230  **********************************
0870            231  ;
0870            232  ;
0870            233  ;
0870            234  ; First demonstrate that the strings
0870            235  ; contain nothing.
0870            236  ;
0870 20 36 78   237           JSR PRINT
0873 8D D3 D4   238           BYT CR,"STRVAR3 contains """,0
0876 D2 D6 C1 
0879 D2 B3 A0 
087C E3 EF EE 
087F F4 E1 E9 
0882 EE F3 A0 
0885 A2 00 
0887 20 39 78   239           JSR PRTSTR
088A 95 0C      240           ADR STRVAR3
088C 20 36 78   241           JSR PRINT
088F A2 8D D3   242           BYT """",CR,"STRVAR4 contains """,0
0892 D4 D2 D6 
0895 C1 D2 B4 
0898 A0 E3 EF 
089B EE F4 E1 
089E E9 EE F3 
08A1 A0 A2 00 
08A4 20 39 78   243           JSR PRTSTR
08A7 B5 0C      244           ADR STRVAR4
08A9            245  ;
08A9            246  ; Now initialize them with LDSTR and MDVS
08A9            247  ;
08A9            248  ;
08A9 20 36 78   249           JSR PRINT
08AC 8D D5 F3   250           BYT CR,"Using LDSTR to initialize STRVAR3",CR,0
08AF E9 EE E7 
08B2 A0 CC C4 
08B5 D3 D4 D2 
08B8 A0 F4 EF 
08BB A0 E9 EE 
08BE E9 F4 E9 
08C1 E1 EC E9 
08C4 FA E5 A0 
08C7 D3 D4 D2 
08CA D6 C1 D2 
08CD B3 8D 00 
08D0 20 33 78   251           JSR LDSTR
08D3 95 0C      252           ADR STRVAR3
08D5 D4 E8 E9   253           BYT "This is a string",0
08D8 F3 A0 E9 
08DB F3 A0 E1 
08DE A0 F3 F4 
08E1 F2 E9 EE 
08E4 E7 00 
08E6            254  ;
08E6            255  ;
08E6            256  ; Print STRVAR3 and STRVAR4 to show
08E6            257  ; that they are indeed different.
08E6            258  ;
08E6 20 36 78   259           JSR PRINT
08E9 8D D3 D4   260           BYT CR,"STRVAR3 contains """,0
08EC D2 D6 C1 
08EF D2 B3 A0 
08F2 E3 EF EE 
08F5 F4 E1 E9 
08F8 EE F3 A0 
08FB A2 00 
08FD 20 39 78   261           JSR PRTSTR
0900 95 0C      262           ADR STRVAR3
0902 20 36 78   263           JSR PRINT
0905 A2 8D D3   264           BYT """",CR,"STRVAR4 contains """,0
0908 D4 D2 D6 
090B C1 D2 B4 
090E A0 E3 EF 
0911 EE F4 E1 
0914 E9 EE F3 
0917 A0 A2 00 
091A 20 39 78   265           JSR PRTSTR
091D B5 0C      266           ADR STRVAR4
091F            267  ;
091F            268  ;
091F            269  ; Now copy STRVAR3 into STRVAR4 and
091F            270  ; print the two strings to shew
091F            271  ; that they are now the same.
091F            272  ;
091F            273  ;
091F 20 36 78   274           JSR PRINT
0922 8D 8D D5   275           BYT CR,CR,"Using MOVS to copy STRVAR3 into STRVAR4",CR,0
0925 F3 E9 EE 
0928 E7 A0 CD 
092B CF D6 D3 
092E A0 F4 EF 
0931 A0 E3 EF 
0934 F0 F9 A0 
0937 D3 D4 D2 
093A D6 C1 D2 
093D B3 A0 E9 
0940 EE F4 EF 
0943 A0 D3 D4 
0946 D2 D6 C1 
0949 D2 B4 8D 
094C 00 
094D 20 30 78   276           JSR MOVS
0950 95 0C B5   277           ADR STRVAR3,STRVAR4
0953 0C 
0954            278  ;
0954            279  ;
0954 20 36 78   280           JSR PRINT
0957 8D D3 D4   281           BYT CR,"STRVAR3 contains """,0
095A D2 D6 C1 
095D D2 B3 A0 
0960 E3 EF EE 
0963 F4 E1 E9 
0966 EE F3 A0 
0969 A2 00 
096B 20 39 78   282           JSR PRTSTR
096E 95 0C      283           ADR STRVAR3
0970 20 36 78   284           JSR PRINT
0973 A2 8D D3   285           BYT """",CR,"STRVAR4 contains """,0
0976 D4 D2 D6 
0979 C1 D2 B4 
097C A0 E3 EF 
097F EE F4 E1 
0982 E9 EE F3 
0985 A0 A2 00 
0988 20 39 78   286           JSR PRTSTR
098B B5 0C      287           ADR STRVAR4
098D            288  ;
098D            289  ;
098D            290  ;
098D            291  **********************************
098D            292  *
098D            293  * The following section of code
098D            294  * demonstrates the IFSO routine.
098D            295  * It compares the contents of
098D            296  * STRVAR3 to the literal "XXXXX"
098D            297  *
098D            298  **********************************
098D            299  ;
098D            300  ;
098D 20 36 78   301           JSR PRINT
0990 A2 8D 8D   302           BYT """",CR,CR,"STRVAR3 is ",0
0993 D3 D4 D2 
0996 D6 C1 D2 
0999 B3 A0 E9 
099C F3 A0 00 
099F 20 27 78   303           JSR IFS0
09A2 95 0C BD   304           ADR STRVAR3,EQ
09A5 00 
09A6 D8 D8 D8   305           BYT "XXXXX",0
09A9 D8 D8 00 
09AC F0 08      306           BFL >0
09AE A9 BD      307           LDA #"="
09B0 20 00 78   308           JSR PUTC
09B3 4C BC 09   309           JMP TESTDONE
09B6            310  ;
09B6 20 36 78   311  ^0       JSR PRINT
09B9 BC BE 00   312           BYT "<>",0
09BC            313  ;
09BC 20 36 78   314  TESTDONE JSR PRINT
09BF A0 A2 D8   315           BYT " ""XXXXX""",CR,0
09C2 D8 D8 D8 
09C5 D8 A2 8D 
09C8 00 
09C9            316  ;
09C9            317  ;
09C9            318  **********************************
09C9            319  *
09C9            320  * This section of code demon-
09C9            321  * strates the IFS routine. It
09C9            322  * loads STRVAR4 with the string
09C9            323  * literal "This is also a string"
09C9            324  * and compares it to STRVAR3.
09C9            325  *
09C9            326  **********************************
09C9            327  ;
09C9            328  ;
09C9            329  ; Load STRVAR4 with "This is also a string"
09C9            330  ;
09C9            331  ;
09C9 20 33 78   332           JSR LDSTR
09CC B5 0C      333           ADR STRVAR4
09CE D4 E8 E9   334           BYT "This is also a string",0
09D1 F3 A0 E9 
09D4 F3 A0 E1 
09D7 EC F3 EF 
09DA A0 E1 A0 
09DD F3 F4 F2 
09E0 E9 EE E7 
09E3 00 
09E4            335  ;
09E4            336  ; Print the contents of the two
09E4            337  ; strings.
09E4            338  ;
09E4            339  ;
09E4 20 36 78   340           JSR PRINT
09E7 8D 8D D3   341           BYT CR,CR,"STRVAR3 contains: """,0
09EA D4 D2 D6 
09ED C1 D2 B3 
09F0 A0 E3 EF 
09F3 EE F4 E1 
09F6 E9 EE F3 
09F9 BA A0 A2 
09FC 00 
09FD 20 39 78   342           JSR PRTSTR
0A00 95 0C      343           ADR STRVAR3
0A02 20 36 78   344           JSR PRINT
0A05 A2 8D D3   345           BYT """",CR,"STRVAR4 contains: """,0
0A08 D4 D2 D6 
0A0B C1 D2 B4 
0A0E A0 E3 EF 
0A11 EE F4 E1 
0A14 E9 EE F3 
0A17 BA A0 A2 
0A1A 00 
0A1B 20 39 78   346           JSR PRTSTR
0A1E B5 0C      347           ADR STRVAR4
0A20            348  ;
0A20 20 36 78   349           JSR PRINT
0A23 A2 8D 00   350           BYT """",CR,0
0A26            351  ;
0A26            352  ;
0A26            353  ; Compare the two strings and see
0A26            354  ; if they are equal.
0A26            355  ;
0A26            356  ;
0A26 20 24 78   357           JSR IFS
0A29 95 0C BD   358           ADR STRVAR3,EQ,STRVAR4
0A2C 00 B5 0C 
0A2F F0 16      359           BFL >0
0A31 20 36 78   360           JSR PRINT
0A34 8D D3 D4   361           BYT CR,"STRVAR3 = STRVAR4",0
0A37 D2 D6 C1 
0A3A D2 B3 A0 
0A3D BD A0 D3 
0A40 D4 D2 D6 
0A43 C1 D2 B4 
0A46 00 
0A47            362  ;
0A47            363  ; Compare the two strings and see
0A47            364  ; if they are not equal.
0A47            365  ;
0A47            366  ;
0A47 20 24 78   367  ^0       JSR IFS
0A4A 95 0C A3   368           ADR STRVAR3,NE,STRVAR4
0A4D 00 B5 0C 
0A50 F0 17      369           BFL >1
0A52 20 36 78   370           JSR PRINT
0A55 8D D3 D4   371           BYT CR,"STRVAR3 <> STRVAR4",0
0A58 D2 D6 C1 
0A5B D2 B3 A0 
0A5E BC BE A0 
0A61 D3 D4 D2 
0A64 D6 C1 D2 
0A67 B4 00 
0A69            372  ;
0A69            373  ;
0A69            374  ; Compare the two strings to see
0A69            375  ; if STRVAR3 < STRVAR4.
0A69            376  ;
0A69 20 24 78   377  ^1       JSR IFS
0A6C 95 0C BC   378           ADR STRVAR3,LT,STRVAR4
0A6F 00 B5 0C 
0A72 F0 16      379           BFL >2
0A74 20 36 78   380           JSR PRINT
0A77 8D D3 D4   381           BYT CR,"STRVAR3 < STRVAR4",0
0A7A D2 D6 C1 
0A7D D2 B3 A0 
0A80 BC A0 D3 
0A83 D4 D2 D6 
0A86 C1 D2 B4 
0A89 00 
0A8A            382  ;
0A8A            383  ;
0A8A            384  ; Check for STRVAR3 <- SIRVAR4
0A8A            385  ;
0A8A 20 24 78   386  ^2       JSR IFS
0A8D 95 0C BC   387           ADR STRVAR3,LE,STRVAR4
0A90 BD B5 0C 
0A93 F0 17      388           BFL >3
0A95 20 36 78   389           JSR PRINT
0A98 8D D3 D4   390           BYT CR,"STRVAR3 <= STRVAR4",0
0A9B D2 D6 C1 
0A9E D2 B3 A0 
0AA1 BC BD A0 
0AA4 D3 D4 D2 
0AA7 D6 C1 D2 
0AAA B4 00 
0AAC            391  ;
0AAC            392  ;
0AAC            393  ;
0AAC            394  ; Check to see if STRVAR3 > STRVAR4.
0AAC            395  ;
0AAC 20 24 78   396  ^3       JSR IFS
0AAF 95 0C BE   397           ADR STRVAR3,GT,STRVAR4
0AB2 00 B5 0C 
0AB5 F0 16      398           BFL >4
0AB7 20 36 78   399           JSR PRINT
0ABA 8D D3 D4   400           BYT CR,"STRVAR3 > STRVAR4",0
0ABD D2 D6 C1 
0AC0 D2 B3 A0 
0AC3 BE A0 D3 
0AC6 D4 D2 D6 
0AC9 C1 D2 B4 
0ACC 00 
0ACD            401  ;
0ACD            402  ;
0ACD            403  ;
0ACD            404  ; Is STRVAR3 >= STRVAR4?
0ACD            405  ;
0ACD 20 24 78   406  ^4       JSR IFS
0AD0 95 0C BE   407           ADR STRVAR3,GE,STRVAR4
0AD3 BD B5 0C 
0AD6 F0 17      408           BFL >5
0AD8 20 36 78   409           JSR PRINT
0ADB 8D D3 D4   410           BYT CR,"STRVAR3 >= STRVAR4",0
0ADE D2 D6 C1 
0AE1 D2 B3 A0 
0AE4 BE BD A0 
0AE7 D3 D4 D2 
0AEA D6 C1 D2 
0AED B4 00 
0AEF            411  ;
0AEF A9 8D      412  ^5       LDA #CR
0AF1 20 00 78   413           JSR PUTC
0AF4            414  ;
0AF4            415  ;
0AF4            416  ;
0AF4            417  ;
0AF4            418  **********************************
0AF4            419  *
0AF4            420  * Demonstrate the LENGTH routine
0AF4            421  *
0AF4            422  **********************************
0AF4            423  ;
0AF4            424  ;
0AF4 20 6C 78   425           JSR LENGTH
0AF7 13 0C      426           ADR STRVAR2
0AF9 8D 17 0D   427           STA LENSTR2
0AFC A9 00      428           LDA #0
0AFE 8D 18 0D   429           STA LENSTR2+1
0B01 20 36 78   430           JSR PRINT
0B04 D4 E8 E5   431           BYT "The length of STRVAR2 is ",0
0B07 A0 EC E5 
0B0A EE E7 F4 
0B0D E8 A0 EF 
0B10 E6 A0 D3 
0B13 D4 D2 D6 
0B16 C1 D2 B2 
0B19 A0 E9 F3 
0B1C A0 00 
0B1E 20 3C 78   432           JSR PRTINT
0B21 17 0D      433           ADR LENSTR2
0B23            434  ;
0B23            435  ;
0B23            436  ;
0B23 A9 8D      437           LDA #CR
0B25 20 00 78   438           JSR PUTC
0B28            439  ;
0B28            440  ;
0B28            441  ;
0B28            442  ;
0B28            443  **********************************
0B28            444  *
0B28            445  * The following code demonstrates
0B28            446  * the use of the SPEED/ASM SUBSIR
0B28            447  * routine.
0B28            448  *
0B28            449  * This code emulates the BASIC
0B28            450  * statements:
0B28            451  *
0B28            452  *
0B28            453  * 10 FOR I = 1 TO 10
0B28            454  * 20 J = 6-I
0B28            455  * 30 PRINT MID$(A$,I,J)
0B28            456  * 40 PRINT MID$(A$,1,I)
0B28            457  * 50 NEXT I
0B28            458  *
0B28 20 18 78   459           JSR FOR0
0B2B 13 0D 01   460           ADR I,1,5
0B2E 00 05 00 
0B31            461  ;
0B31 38         462           SEC 
0B32 A9 06      463           LDA #6
0B34 ED 13 0D   464           SBC I
0B37 8D 15 0D   465           STA J
0B3A A9 00      466           LDA /6
0B3C ED 14 0D   467           SBC I+1
0B3F 8D 16 0D   468           STA J+1
0B42            469  ;
0B42 20 66 78   470           JSR SUBSTR
0B45 95 0C 13   471           ADR STRVAR3,I,J,STRVAR4
0B48 0D 15 0D 
0B4B B5 0C 
0B4D 20 39 78   472           JSR PRTSTR
0B50 B5 0C      473           ADR STRVAR4
0B52 A9 8D      474           LDA #CR
0B54 20 00 78   475           JSR PUTC
0B57            476  ;
0B57 20 66 78   477           JSR SUBSTR
0B5A 95 0C F0   478           ADR STRVAR3,ONE,I,STRVAR4
0B5D 0B 13 0D 
0B60 B5 0C 
0B62 20 39 78   479           JSR PRTSTR
0B65 B5 0C      480           ADR STRVAR4
0B67            481  ;
0B67 A9 8D      482           LDA #CR
0B69 20 00 78   483           JSR PUTC
0B6C 20 1B 78   484           JSR NEXT
0B6F            485  ;
0B6F            486  ;
0B6F            487  ;
0B6F            488  *********************************
0B6F            489  *
0B6F            490  * Test the INDEX routine: This
0B6F            491  * code loads STRVAR4 with the
0B6F            492  * string "string" and searches for
0B6F            493  * "string" within STRVAR3.
0B6F            494  *
0B6F            495  *********************************
0B6F            496  ;
0B6F            497  ;
0B6F 20 33 78   498           JSR LDSTR
0B72 B5 0C      499           ADR STRVAR4
0B74 F3 F4 F2   500           BYT "string",0
0B77 E9 EE E7 
0B7A 00 
0B7B            501  ;
0B7B 20 69 78   502           JSR INDEX
0B7E B5 0C 95   503           ADR STRVAR4,STRVAR3
0B81 0C 
0B82            504  ;
0B82 8D 19 0D   505           STA STRINDX         ; Store L.O. index into STRINDX
0B85 A9 00      506           LDA #0              ; Set H.O. byte of index to zero
0B87 8D 1A 0D   507           STA STRINDX+1
0B8A            508  ;
0B8A            509  ; Print the results:
0B8A            510  ;
0B8A 20 36 78   511           JSR PRINT
0B8D 8D 8D A2   512           BYT CR,CR,"""string"" was found at position: ",0
0B90 F3 F4 F2 
0B93 E9 EE E7 
0B96 A2 A0 F7 
0B99 E1 F3 A0 
0B9C E6 EF F5 
0B9F EE E4 A0 
0BA2 E1 F4 A0 
0BA5 F0 EF F3 
0BA8 E9 F4 E9 
0BAB EF EE BA 
0BAE A0 00 
0BB0 20 3C 78   513           JSR PRTINT
0BB3 19 0D      514           ADR STRINDX
0BB5 A9 8D      515           LDA #CR
0BB7 20 00 78   516           JSR PUTC
0BBA            517  ;
0BBA            518  ;
0BBA            519  **********************************
0BBA            520  *
0BBA            521  * Demonstrate the GCNCAT routine,
0BBA            522  *
0BBA            523  * This code concatenates STRVAR4
0BBA            524  * (which contains "string") to
0BBA            525  * STRVAR3 and prints the result.
0BBA            526  *
0BBA            527  **********************************
0BBA            528  ;
0BBA            529  ;
0BBA 20 6F 78   530           JSR CONCAT
0BBD 95 0C B5   531           ADR STRVAR3,STRVAR4,STRVAR5
0BC0 0C D5 0C 
0BC3            532  ;
0BC3 20 36 78   533           JSR PRINT
0BC6 8D C3 CF   534           BYT CR,"CONCAT(STRVAR3,STRVAR4)= """,0
0BC9 CE C3 C1 
0BCC D4 A8 D3 
0BCF D4 D2 D6 
0BD2 C1 D2 B3 
0BD5 AC D3 D4 
0BD8 D2 D6 C1 
0BDB D2 B4 A9 
0BDE BD A0 A2 
0BE1 00 
0BE2 20 39 78   535           JSR PRTSTR
0BE5 D5 0C      536           ADR STRVAR5
0BE7            537  ;
0BE7 20 36 78   538           JSR PRINT
0BEA A2 8D 00   539           BYT """",CR,0
0BED            540  ;
0BED            541  ;
0BED            542  ;
0BED 4C 69 FF   543           JMP EXIT
0BF0            544  ;
0BF0 01 00      545  ONE      ADR 1
0BF2            546  ;
0BF2 1F D4 E8   547  STRVAR1  STR "This string was pre-initialized"
0BF5 E9 F3 A0 
0BF8 F3 F4 F2 
0BFB E9 EE E7 
0BFE A0 F7 E1 
0C01 F3 A0 F0 
0C04 F2 E5 AD 
0C07 E9 EE E9 
0C0A F4 E9 E1 
0C0D EC E9 FA 
0C10 E5 E4 
0C12 00         548           BYT 0
0C13            549  ;
0C13 80 00      550  STRVAR2  ADR 128
0C15            551           DFS 128
0C95            552  ;
0C95            553  ;
0C95 1E 00      554  STRVAR3  ADR 30
0C97            555           DFS 30
0CB5            556  ;
0CB5 1E 00      557  STRVAR4  ADR 30
0CB7            558           DFS 30
0CD5            559  ;
0CD5 3C 00      560  STRVAR5  ADR 60
0CD7            561           DFS 60
0D13            562  ;
0D13 00 00      563  I        ADR 0
0D15 00 00      564  J        ADR 0
0D17 00 00      565  LENSTR2  ADR 0
0D19 00 00      566  STRINDX  ADR 0
0D1B            567  ;
0D1B            568  ;
0D1B            569  ;
0D1B            570           END 
